xcb 获取鼠标指针的坐标

1typedef struct xcb_query_pointer_reply_t {
2    uint8_t      response_type;
3    uint8_t      same_screen;
4    uint16_t     sequence;
5    uint32_t     length;
6    xcb_window_t root;
7    xcb_window_t child;
8    int16_t      root_x;
9    int16_t      root_y;
10    int16_t      win_x;
11    int16_t      win_y;
12    uint16_t     mask;
13    uint8_t      pad0[2];
14} xcb_query_pointer_reply_t;
15
16xcb_query_pointer_cookie_t xcb_query_pointer(xcb_connection_t *conn, xcb_window_t window);
17xcb_query_pointer_reply_t *xcb_query_pointer_reply(xcb_connection_t *conn, xcb_query_pointer_cookie_t cookie, xcb_generic_error_t **e);
1#include <stdio.h>
2#include <xcb/xcb.h>
3
4int main()
5{
6    // 连接到X11 Server
7    xcb_connection_t* conn = xcb_connect(NULL, NULL);
8
9    // 获取screen
10    const xcb_setup_t* setup = xcb_get_setup(conn);
11    xcb_screen_iterator_t iter = xcb_setup_roots_iterator(setup);
12    xcb_screen_t* screen = iter.data;
13
14    // 获取鼠标指针的坐标
15    xcb_query_pointer_cookie_t cookie = xcb_query_pointer(conn, screen->root);
16    xcb_query_pointer_reply_t* reply = xcb_query_pointer_reply(conn, cookie, NULL);
17    printf("%d %d\n", reply->root_x, reply->root_y);
18    free(reply);
19    
20    xcb_disconnect(conn);
21    return 0;
22}